Day 06 終於在 Packet Tracer 裡把這條路真的跑起來:
PC0
↓
Router0
↓
Router1
↓
Server0
也第一次真的下了 Static Route:
ip route 10.0.0.0 255.255.255.0 192.168.12.2
但回頭看的時候,發現其實還有兩個洞。
第一個是:
ip route 到底是在指定什麼?
第二個是:
如果 Routing Table 裡很多條 Route 都可以走,Router 到底選哪一條?
又繞回了 /24、/25、/26。
原來 CIDR 不是 Subnetting 才會用到。
Router 每次查 Routing Table,其實就在用這些 Prefix 判斷:
這個 Destination IP 到底屬於哪一條 Route?
先看:
ip route 192.168.2.0 255.255.255.0 10.0.0.2
一開始很容易把這串看成一整坨指令。
拆開其實是:
ip route
→ 建立 Static Route
192.168.2.0
255.255.255.0
→ 目的網段是 192.168.2.0/24
10.0.0.2
→ Next Hop
翻成人話:
如果目的 IP 屬於 192.168.2.0/24,就先把 Packet 交給 10.0.0.2。
這裡有一個很重要的點:
Router 不需要先知道整趟路怎麼走。
它現在只需要知道:
下一棒要交給誰?
所以 Static Route 比較像:
目的網段
→ 下一跳
而不是:
從起點一路規劃到終點的完整導航
看到:
192.168.2.0/24
以前有時候會下意識把 192.168.2.0 看成「某一台」。
但在 Route 裡,它代表的是一個 Network。
/24 代表:
前 24 bits = Network bits
後 8 bits = Host bits
所以:
2^8 = 256
整段範圍是:
192.168.2.0 ~ 192.168.2.255
因此:
192.168.2.87
192.168.2.100
192.168.2.200
全部都屬於:
192.168.2.0/24
所以如果 Routing Table 有:
192.168.2.0/24 → 10.0.0.2
Destination IP 是 192.168.2.87,當然也會匹配這條 Route。
這裡今天終於比較有感。
IPv4 一共有 32 bits。
如果是 /25:
前 25 bits = Network bits
後 7 bits = Host bits
把第四個 octet 單獨拿出來:
N H H H H H H H
↑
第 25 個 bit
注意:
第 25 個 bit 已經是 Network bit。
剩下 7 個才是 Host bits。
所以這個 Network bit 只有兩種可能:
0xxxxxxx
1xxxxxxx
當最左邊是 0:
00000000 = 0
01111111 = 127
所以第一段是:
0 ~ 127
當最左邊是 1:
10000000 = 128
11111111 = 255
所以第二段是:
128 ~ 255
因此,把一個 /24 再切成 /25 時會得到:
192.168.2.0/25
→ 192.168.2.0 ~ 192.168.2.127
192.168.2.128/25
→ 192.168.2.128 ~ 192.168.2.255
而每一個 /25 有:
2^7 = 128 個總位址
傳統 IPv4 subnet 裡扣掉 Network Address 和 Broadcast Address,可用 Host 是 126 個。
/26 代表:
前 26 bits = Network bits
後 6 bits = Host bits
第四個 octet 就變成:
N N H H H H H H
前面兩個 Network bits 有四種可能:
00xxxxxx
01xxxxxx
10xxxxxx
11xxxxxx
因為還有 6 個 Host bits:
2^6 = 64
所以每一段有 64 個位址。
四段就是:
00xxxxxx → 0 ~ 63
01xxxxxx → 64 ~ 127
10xxxxxx → 128 ~ 191
11xxxxxx → 192 ~ 255
也就是:
192.168.2.0/26
192.168.2.64/26
192.168.2.128/26
192.168.2.192/26
這裡我原本很容易寫成:
0~64
65~127
但這樣第一段其實有 65 個數字。
比較不容易錯的方法是先找每段的「起點」:
0
64
128
192
再用:
下一段起點 - 1 = 這一段終點
所以:
0 ~ 63
64 ~ 127
128 ~ 191
192 ~ 255
目前可以先這樣看:
/24
8 個 Host bits
2^8 = 256 個位址
0 ~ 255
/25
7 個 Host bits
2^7 = 128 個位址
0 ~ 127
128 ~ 255
/26
6 個 Host bits
2^6 = 64 個位址
0 ~ 63
64 ~ 127
128 ~ 191
192 ~ 255
所以 Prefix 越大:
/24
↓
/25
↓
/26
Network bits 越多,Host bits 越少,單一網段的範圍也越小。
換句話說:
Prefix 越長,描述的範圍通常越精準。
這件事就是 Router 接下來選 Route 的關鍵。
假設 Router 裡有:
192.168.2.0/24 → 10.0.0.2
192.168.2.64/26 → 10.0.0.3
現在 Destination IP 是:
192.168.2.70
先看 /24:
192.168.2.0 ~ 192.168.2.255
有包含 .70。
再看 /26:
192.168.2.64 ~ 192.168.2.127
也有包含 .70。
所以兩條 Route 都 Match。
那 Router 要選誰?
答案是:
192.168.2.64/26 → 10.0.0.3
因為:
/26 > /24
/26 的 Prefix 更長、範圍更精準。
這就是:
Longest Prefix Match
再看一題:
172.16.0.0/16 → A
172.16.50.0/24 → B
172.16.50.128/25 → C
0.0.0.0/0 → D
Destination IP:
172.16.50.200
逐條看:
172.16.0.0/16
→ 172.16.x.x
→ 符合
172.16.50.0/24
→ 172.16.50.0 ~ 172.16.50.255
→ 符合
172.16.50.128/25
→ 172.16.50.128 ~ 172.16.50.255
→ 也符合
0.0.0.0/0
→ 也可以 Match
四條都能符合。
但 Router 最後選:
/25
也就是 C。
原因只有一個:
在所有符合 Destination IP 的 Route 裡,選 Prefix 最長的那條。
可以先養成這個解題順序:
1. 哪些 Route 包含 Destination IP?
2. 符合的 Route 裡,哪一個 /數字最大?
3. 選那一條的 Next Hop
/16 比 /25 好看很多。
因為一個 octet 剛好 8 bits。
所以:
172.16.0.0/16
前 16 bits = Network
後 16 bits = Host
前兩個 octet 剛好就是:
172.16
因此可以直接想成:
172.16.x.x
範圍:
172.16.0.0 ~ 172.16.255.255
所以:
172.16.50.20
當然屬於:
172.16.0.0/16
目前 /8、/16、/24 都可以先這樣直覺看:
10.0.0.0/8
→ 10.x.x.x
172.16.0.0/16
→ 172.16.x.x
192.168.1.0/24
→ 192.168.1.x
真的比較需要停下來算的,通常是 /25、/26、/27 這種切在 octet 中間的 Prefix。
如果是:
0.0.0.0/0
代表:
0 個 Network bits
32 個 Host bits
所以它可以涵蓋所有 IPv4 Destination。
例如:
192.168.1.0/24 → 10.0.0.2
0.0.0.0/0 → 10.0.0.1
Destination IP:
192.168.1.50
兩條都能 Match。
但:
/24 > /0
所以走 10.0.0.2。
如果 Destination IP 是:
8.8.8.8
又沒有其他更精準的 Route,最後才會落到:
0.0.0.0/0 → 10.0.0.1
所以 Default Route 可以先理解成:
其他更精準的 Route 都找不到時,最後的兜底路線。
它不是因為「優先權很高」才什麼都接。
剛好相反。
它是 Prefix 最短、最不精準的那一條。
把今天全部濃縮,可以想成:
收到 Packet
↓
看 Destination IP
↓
查 Routing Table
↓
找出所有可以 Match 的 Route
↓
選 Longest Prefix Match
↓
取得 Next Hop / 出口
↓
把 Packet 往下一跳送
如果沒有任何更精準的 Route:
看看有沒有 0.0.0.0/0
有就走 Default Route。
沒有的話,就沒有路可以走。
今天最重要的是把幾件原本分開的東西接在一起。
CIDR
→ 告訴我們 Network bits 有幾個
→ 也決定這個 Route 涵蓋多大的範圍
Static Route
→ 告訴 Router 某個目的網段要交給哪個 Next Hop
Longest Prefix Match
→ 多條 Route 都符合時,選範圍最精準的 Prefix
Default Route
→ 沒有更精準 Route 時最後兜底
目前看到:
/24 → 256 個總位址
/25 → 128 個總位址
/26 → 64 個總位址
/30 → 4 個總位址
不用要求自己看到 /27、/28 就馬上心算。
但至少要能自己推:
Host bits = 32 - Prefix
/25
→ 7 個 Host bits
→ 2^7 = 128
/26
→ 6 個 Host bits
→ 2^6 = 64
然後知道:
/25
0xxxxxxx → 0~127
1xxxxxxx → 128~255
這樣就不是在死背表格了。
如果看到:
192.168.2.0/24 → A
192.168.2.128/25 → B
192.168.2.192/26 → C
0.0.0.0/0 → D
再給一個 Destination IP:
192.168.2.200
我們應該可以自己做兩件事:
1. 判斷它落在哪些網段裡
2. 從符合的 Route 中找出 Longest Prefix Match
這題最後會選:
192.168.2.192/26 → C
因為 .200 同時被 /24、/25、/26、/0 包住,但 /26 最精準。